#ifndef NODE
#define NODE

#include "../mesh/mesh.h"
#include "../texture/draw.h"
#include "../mesh/geometry.h"
#include "physics/physics.h"

namespace sleek
{
    namespace core { namespace engine { class engine; } }
    namespace node
    {
        class animate
        {
            public:
                virtual void OnAnimate(unsigned int time) = 0;
        };
        class Node : public core::engine::reference
        {
            public:
                Node(core::engine::engine*);
                virtual ~Node();

                virtual void enablePhysics(physics::body_geometry, physics::body_type);
                virtual void setPosition(core::math::vector3df);
                virtual void setRotation(core::math::vector3df);
                virtual void setScale(core::math::vector3df);
                virtual void setMaterial(mesh::material*);
                virtual void setMesh(mesh::MeshBuffer*);

                virtual core::math::vector3df getPosition();
                virtual core::math::vector3df getRotation();
                virtual core::math::vector3df getScale();
                virtual physics::Physics* getPhysics();
                virtual mesh::material  * getMaterial();
                virtual mesh::MeshBuffer* getMesh();
                virtual void disablePhysics();

                virtual void render();
            protected:
                Node(){}
                physics::Physics *body;
                core::engine::engine *smgr;

                mesh::MeshBuffer *mesh;
                mesh::material mat;
                core::math::vector3df pos, rot, sca;
        };
    }
}
#endif // NODE
